package com.zyk.leetcode;

/**
 * @author zhangsan
 * @date 2021/6/14 16:17
 */
public class C67 {

    public static String addBinary(String a, String b) {
        StringBuilder res = new StringBuilder();
        char[] num1 = a.toCharArray();
        char[] num2 = b.toCharArray();
        int i = num1.length - 1, j = num2.length - 1;
        int carryBit = 0;
        while (i >= 0 && j >= 0) {
            if ((num1[i] ^ num2[j]) == 1) {
                if (carryBit == 0) {
                    res.append(1);
                } else {
                    res.append(0);
                    carryBit = 1;
                }
            } else {     // 他俩都是1或者都是0
                res.append(carryBit);       // 直接加之前的进位
                carryBit = num1[i] & 1;     // 如果是1,进位变为1. 如果是0进位就是0
            }
            i--;
            j--;
        }
        while (i >= 0) {
            if (carryBit == 0) {
                res.append(num1[i]);
            } else {     // 进位是1
                if ((num1[i] & 1) == 1) {    // 我是1
                    res.append(0);
                } else {     // 我是0
                    res.append(1);
                    carryBit = 0;
                }
            }
            i--;
        }
        while (j >= 0) {
            if (carryBit == 0) {
                res.append(num2[j]);
            } else {     // 进位是1
                if ((num2[j] & 1) == 1) {    // 我是1
                    res.append(0);
                } else {     // 我是0
                    res.append(1);
                    carryBit = 0;
                }
            }
            j--;
        }
        res.append(carryBit == 1 ? 1 : "");
        return res.reverse().toString();
    }


    // for test
    public static void main(String[] args) {
//        System.out.println((int) '0');
//        System.out.println((int) '1');
//        System.out.println( ('1' + '0') );

//        String a = "11",
//                b = "1";

//        String a = "11",
//                b = "11";

        String a = "1010",
                b = "1011";
        System.out.println(addBinary(a, b));
    }

}
